package com.luckynote.common.base.result;

import java.io.Serializable;

/**
 * <pre>
 * *********************************************
 * Copyright LUCKY-NOTE.
 * All rights reserved.
 * ****************************************************
 *  Version       Date         Author            Desc
 *    v1.0       2019/6/29      bingo           系统相应信息
 * ****************************************************
 * </pre>
 */
public class ResponseInfo implements Serializable {

    private static final long serialVersionUID = 6116212425030761502L;
    /* 结果代码:业务代码由两位英文字母和四位数字组成，底层框架和公共工具使用SYS开头的代码 */
    private final String code;
    /* 业务信息 */
    private final String tips;
    /* 系统信息 */
    private String debugInfo;

    /**
     * 系统响应信息
     * @param code 结果代码:业务代码由两位英文字母和四位数字组成，底层框架和公共工具使用SYS开头的代码
     * @param tips 业务信息，一般是展现给业务人员看的
     * @param debugInfo 系统信息，一般是展现给开发或运维人员看的
     */
    public ResponseInfo(String code, String tips, String debugInfo) {
        super();
        if (code==null)
            this.code = "";
        else
            this.code = code.trim();

        if (tips==null)
            this.tips = "";
        else
            this.tips = tips.trim();

        if (debugInfo==null)
            this.debugInfo = "";
        else
            this.debugInfo = debugInfo.trim();
    }

    /**
     * 系统响应信息，code为空
     * @param tips 业务信息，一般是展现给业务人员看的
     * @param debugInfo 系统信息，一般是展现给开发或运维人员看的
     */
    public ResponseInfo(String tips, String debugInfo) {
        this(null, tips, debugInfo);
    }

    /**
     * 用已有的系统响应信息构建新的系统响应信息并重新指定debug信息
     * @param responseInfo 系统响应信息
     * @param debugInfo 系统信息，一般是展现给开发或运维人员看的
     */
    public ResponseInfo(ResponseInfo responseInfo, String debugInfo) {
        this(responseInfo.getCode(), responseInfo.getTips(), debugInfo);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof ResponseInfo) {
            ResponseInfo referenceObj = (ResponseInfo)obj;
            if ( code.equals(referenceObj.getCode()) && tips.equals(referenceObj.getTips()) && debugInfo.equals(referenceObj.getDebugInfo()) )
                return true;
        }
        return false;
    }

    @Override
    public String toString() {
        return new StringBuffer("response info, code: ").append(code).append(", tips: ").append(tips).append(", debuginfo: ").append(debugInfo).toString();
    }

    /*********************************************************
     *                                                       *
     *                  setter() & getter()                  *
     *                                                       *
     *********************************************************/

    /**
     * @return the code 结果代码
     */
    public String getCode() {
        return code;
    }

    /**
     * @return the info 业务信息
     */
    public String getTips() {
        return tips;
    }

    /**
     * @return the debugInfo 系统信息
     */
    public String getDebugInfo() {
        return debugInfo;
    }

    /**
     * @param debugInfo the 系统信息 to set
     */
    public void setDebugInfo(String debugInfo) {
        this.debugInfo = debugInfo;
    }
}
